package com.lainiao.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 乱码
 * 1. 乱码原因：在解析过程中默认使用的编码方式为 ISO-8859-1（此编码不支持中文），所以解析时会出现乱码
 * 2. Tomcat8 及 以上版本：
 *          GET请求：不会乱码
 *          POST请求：会乱码，需要设置服务器解析编码的格式：request.setCharacterEncoding("UTF-8");
 * 3. Tomcat7 及 以下版本：
 *          GET请求：会乱码，需转码，但用的少了，了解
 *          POST请求：同 Tomcat8
 * 4. GET请求：
 *          Tomcat8 及以上 不乱码
 * 5. POST请求：
 *          无论什么版本，均乱码
 *          解决方法：request.setCharacterEncoding("UTF-8");     // 仅适用于POST
 */
@WebServlet("/re")
public class request02_RequestEncoding extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 设置请求的编码格式，用于验证POST方法会出现乱码
        // 需配合使用：RequestEncoding.jsp
        request.setCharacterEncoding("UTF-8");

        // 获取客户端传递的参数
        String uname = request.getParameter("uname");
        String pd = request.getParameter("pd");
        System.out.println("姓名：" + uname);
        System.out.println("密码：" + pd);

        // Tomcat7 以下，GET请求转码方法（了解）
        String name = new String(request.getParameter("uname").getBytes("ISO_8859-1"),"UTF-8");
        System.out.println("name" + name);

    }
}
